package com.nku.mason.masonframework.aop;

import java.lang.reflect.Method;
import java.util.List;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
/**
 * 代理类管理器
 * @author Mason
 * @date 2017年3月20日
 */
public class ProxyManager {
	/**
	 * 输入一个目标类和一组Proxy接口实现，输出一个代理对象
	 * @param targetClass 被代理的目标类
	 * @param proxyList 实现类Proxy接口的代理对象组成的代理链
	 * @return 当前目标类的当前代理链上当前代理的执行结果
	 */
	@SuppressWarnings("unchecked")
	public static <T> T createProxy(final Class<?> targetClass, final List<Proxy> proxyList){
		return (T) Enhancer.create(targetClass, new MethodInterceptor() {
			
			@Override
			public Object intercept(Object targetObject, Method targetMethod, Object[] methodParams, MethodProxy methodProxy) throws Throwable {
				return new ProxyChain(targetClass, targetObject, targetMethod, methodProxy, methodParams, proxyList).doProxyChain();
			}
		});
	}
}
